package com.tul.vapp.servicecenter.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.tul.vapp.servicecenter.entity.Item;
import com.tul.vapp.servicecenter.entity.Namespace;

/**
 * IItemDao
 * 
 * @author wwxiang
 * @since 2017/12/27.
 */
public interface IReleaseItemDao {

	/**
	 * 根据appId namespace key获取值
	 * 
	 * @param appId appId
	 * @param namespace namespace
	 * @param keyName key Name
	 * @return 配置值
	 */
	Item getItem(@Param("appId") String appId, @Param("namespace") String namespace, @Param("keyName") String keyName);

	/**
	 * 获取指定命名空间下的所有配置项
	 * 
	 * @param appId appId
	 * @param namespace namespace
	 * @return 所有配置项
	 */
	List<Item> getItems(@Param("appId") String appId, @Param("namespace") String namespace);

	/**
	 * 查询所有的配置项
	 * 
	 * @return 所有配置项
	 */
	List<Item> getAllItems();

	/**
	 * 找出配置项发生变化的 Namespace
	 * 
	 * @return 命名空间(appId, namespace)
	 */
	List<Namespace> getModifiedNamespace();

	/**
	 * 添加配置
	 * 
	 * @param item 配置项
	 * @return 返回添加数量
	 */
	int addItem(Item item);

	/**
	 * 删除指定配置
	 * 
	 * @param appId appId
	 * @param namespace namespace
	 * @param keyName key Name
	 * @return 删除的数量
	 */
	int deleteItem(@Param("appId") String appId, @Param("namespace") String namespace,
                   @Param("keyName") String keyName);

	/**
	 * 删除指定配置
	 *
	 * @param appId appId
	 * @param namespace namespace
	 * @return 删除的数量
	 */
	int deleteItemInNs(@Param("appId") String appId, @Param("namespace") String namespace);

	/**
	 * 删除指定配置
	 *
	 * @param appId appId
	 * @return 删除的数量
	 */
	int deleteItemInApp(String appId);

	/**
	 * 更新配置项
	 * 
	 * @param item 配置项
	 * @return 更新数量
	 */
	int updateItem(Item item);
}
